#ifndef MEMORY_MANAGER_H
#define MEMORY_MANAGER_H

#include <cstddef>
#include <memory>
#include <unordered_map>
#include <string>
#include <mutex>

class MemoryManager {
public:
    // 获取当前进程内存使用量(字节)
    static size_t getCurrentRSS();
    
    // 获取进程峰值内存使用量(字节)
    static size_t getPeakRSS();
    
    // 创建带跟踪的shared_ptr
    template<typename T, typename... Args>
    static std::shared_ptr<T> make_shared_tracked(const std::string& tag, Args&&... args) {
        auto ptr = std::make_shared<T>(std::forward<Args>(args)...);
        trackMemory(tag, sizeof(T));
        return ptr;
    }
    
    // 跟踪内存分配
    static void trackMemory(const std::string& tag, size_t size);
    
    // 打印内存使用情况
    static void printMemoryUsage();
    
    // 检查内存泄漏
    static void checkLeaks();

private:
    static std::unordered_map<std::string, size_t> memory_usage_;
    static std::mutex mutex_;
};

#endif // MEMORY_MANAGER_H